package dfbz.com.service;

import dfbz.com.model.Dept;
import dfbz.com.model.User;
import dfbz.com.model.UserFocus;


import java.util.List;
import java.util.Map;

public interface UserService<T>  {
    /**
     * 通过名字查找用户
     *
     * @param username 用户名
     * @return 存在就返回true；否则返回false
     */

    User findUser(String username);

    /**
     * 通过邮件查找用户
     *
     * @param email
     * @return
     */
    User findUserByEmail(String email);


    /**
     * 添加新用户
     *
     * @param t
     */
    void add(T t);




    /**
     * 重置用户登录密码
     *
     * @param user
     */
    void replacePw(User user);



    /**
     *
     * 加载所有用户基本信息到页面
     */

    List showUser();


    /**
     * 通过用户id得到用户
     *
     * @param id
     * @return
     */
    User findUserById(Object id);


    /**
     * 分页查询的完善，添加模糊查询
     *
     * @param current
     * @param row
     * @param search
     * @return
     */
    List<Map<String, Object>> showUserByPage2(String current, String row, String search);


    /**
     * 找到登录的用户的关注id列表
     *
     * @param userId 登录的用户id
     * @return 这个登录用户所关注的用户对象
     */
    List<UserFocus> findFocusUser(Object userId);

    List<UserFocus> findFocusUser(Object userId, Integer current);

    List<Map<String, Object>> showUserByPage3(Integer userId, String current, String search);

    /**
     * 查询到的用户信息总数
     *
     * @param search
     * @return
     */
    long findTotalCount(String search);


    /**
     * 找到登录用户所在的部门名字
     * @param deptId
     * @return
     */
    Dept findDeptName(Integer deptId);


    /**
     * 登录成功后更新该用户的登录时间
     * @param id
     * @return
     */
    Boolean updateLoginTime(Integer id);
}
